/**
 * \file lib/system/io.c
 * \author Davide Gessa
 * \date 10-16-09
 */
#include "io.h"
#include "syscall.h"
#include <libc/ctype.h>
#include "regs.h"


/**
 * Scrive un byte su una porta
 */
void io_outb(uint16_t port, uint8_t data)
{
	regs_t r;
	r.eax = IO_OUTB;
	r.ebx = port;
	r.ecx = data;
	syscall_call(r);
}


/**
 * Legge un byte da una porta
 */
uint8_t io_inb(uint16_t port)
{
	regs_t r;
	r.eax = IO_INB;
	r.ebx = port;
	return (uint8_t) syscall_call(r);	
}


/**
 * Scrive una word su una porta
 */
void io_outw(uint16_t port, uint16_t data)
{
	regs_t r;
	r.eax = IO_OUTW;
	r.ebx = port;
	r.ecx = data;
	syscall_call(r);	
}


/**
 * Legge una word da una porta
 */
uint16_t io_inw(uint16_t port)
{
	regs_t r;
	r.eax = IO_INW;
	r.ebx = port;
	return (uint16_t) syscall_call(r);	
}

